package mylab.demo.usm.biz.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import mylab.annotation.rds.ColumnComment;
import mylab.commons.web.mvc.entity.BaseTreeEntity;
import mylab.starters.mybatis.handler.CommaToListTypeHandler;
import mylab.starters.mybatis.interceptor.impl.foreignKey.ForeignKey;

import java.util.List;

/**
 * <p>
 * 角色继承:继承父角色的权限，可递归继承。参见 RBAC1 模型概念
 * {@attention:继承不可形成环路，一般是树形图或有向无环图}
 * </p>
 */
@Getter
@Setter
@ApiModel("角色表")
@TableName(autoResultMap = true)
public class SysRole extends BaseTreeEntity<SysRole> {

    @ForeignKey(SysRole.class)
    @ColumnComment("父级id")
    @ApiModelProperty(value = "父级id")
    @TableField
    private String parentId;

    @ColumnComment("简称")
    @ApiModelProperty(value = "简称")
    @TableField
    private String shortname;

    /**
     * <p>
     * 角色容量: 当capacity != null时生效，限制该角色下用户数
     * 基数约束：参见 RBAC2 模型概念
     * </P>
     */
    @ColumnComment("角色容量")
    @ApiModelProperty(value = "角色容量")
    @TableField
    private Integer capacity;

    /**
     * <p>
     * 先决条件角色: 即用户想获得某上级角色,必须先获得其下一级的角色
     * 参见 RBAC2 模型概念
     * </p>
     */
    @ForeignKey(SysRole.class)
    @ColumnComment("先决角色id列表")
    @ApiModelProperty(value = "先决角色id列表，逗号分隔")
    @TableField(typeHandler = CommaToListTypeHandler.class)
    private List<String> premiseIds;

//    @ApiModelProperty(value = "角色数据权限")
//    private String dataPermissionType;
}
